$LOAD_PATH << '.'
require 'gosu'
require 'jogador'
require 'bomba'
require 'estrela'
	class Jogo < Gosu::Window
		@@formato = [3, 1.0, 1.0, 0xffffff00]
		def initialize	    					
			super(640,480,false)
			self.caption = "NYAN CAT - THE GAME"
			@imagem_fundo = Gosu::Image.new(self, "fundo.png", true)
			@imagem_inicio = Gosu::Image.new(self, "inicio.png", true)
      @imagem_gameover = Gosu::Image.new(self, "fundo_gameover.fw.png", true)
			@jogador = Jogador.new(self)
			@som = Gosu::Sample.new(self, "nyan.ogg")
			@som.play
      @bomba  = Bomba.new(self) 
      @estrela = Estrela.new(self)
			@x = 0
			@fonte = Gosu::Font.new(self, Gosu::default_font_name, 20)
			@estado = "INICIO"			
		end

		def draw
			@imagem_inicio.draw(0,0,0)			
			if    @estado == "INICIO"  then draw_inicio
    		elsif @estado == "JOGANDO" then draw_jogando
        elsif @estado ==  "GAMEOVER" then draw_gameover                   		     
    		end
		end

		private
  			def draw_inicio
    			msg = "PRESSIONE [ENTER] PARA COMECAR"
    			title = "NYAN CAT - THE GAME"
    			x = self.width / 2 - @fonte.text_width(msg,1) / 2    			
    			@fonte.draw(msg, x, 420, *@@formato)
    			@fonte.draw(title, 240, 10, *@@formato)
  			end

  			def draw_jogando
          if(@estado == "JOGANDO") then
            @jogador.drawJogadorLimpo()
          else
  				  @jogador.draw()
          end
        @fonte.draw("Score: #{@jogador.score}", 500,0,*@@formato)
				@imagem_fundo.draw(@x,0,0)
				@imagem_fundo.draw(@x-640,0,0)	
        @bomba.draw	
        @estrela.draw		    	   		    	
   			end

        def draw_gameover
          @jogador.drawJogadorExplodindo()
          msg = "PRESSIONE [ENTER] PARA TENTAR NOVAMENTE"
          x = self.width / 2 - @fonte.text_width(msg,1) / 2 
          @fonte.draw(msg, x, 420, *@@formato)
          @imagem_gameover.draw(0,0,2)
        end
  		public
  			def update
    			if    @estado == "INICIO" then update_inicio      
    			elsif @estado == "JOGANDO" then update_jogando 
          elsif @estado == "GAMEOVER" then update_inicio 		
    			end
											
  			end

 		private 
  			def update_inicio
   				@estado = "JOGANDO" if button_down?(Gosu::Button::KbReturn)
  			end


  			def update_jogando
          @jogador.update() 
          @bomba.update 
          @estrela.update  
          @jogador.pegou_estrela?(@estrela)
  				@x = (@x - 5)% 640
          if  @jogador.atingido_por?  @bomba
            @estado = "GAMEOVER"
            @jogador.score = 0
          else
      			@jogador.cima  if button_down?(Gosu::Button::KbUp)  
      			@jogador.baixo if button_down?(Gosu::Button::KbDown)								
  			  end
        end    
end